// 这里是所有路由的操作，操作数据库肯定是异步的，所以async

const service = require('../service/user.service.js')
const utils = require('../utils/utils')
const jwt = require('jsonwebtoken')
class UserController {
    // 注册方法
    async create(ctx, next) {
        try {
            // 获取用户请求传递的参数
            const user = ctx.request.body
            const result = await service.create(user)
            // 返回数据
            ctx.body = utils.success(result, '注册成功')
        } catch (error) {
            ctx.body = utils.fail('注册失败！')
        }
    }
    // 登录接口
    async login(ctx, next) {
        try {
            const user = ctx.request.body
            const res = await service.getUserById(user.userId)
            delete res[0].password
            const token = jwt.sign({
                data: user
            }, 'lls', { expiresIn: '6h'})
            // 返回数据
            ctx.body = utils.success('登录成功!', {
                token,
                userInfo: res[0],
            })
        } catch (error) {
            ctx.body = utils.fail('登录失败！')
        }
    }
    // 查询用户列表
    async getList(ctx, next) {
        try {
            const { userId, phone, nickname, isInnerMember, userStatus, grade, goal, headUrl} = ctx.request.query
            const { page, skipIndex } = utils.pager(ctx.request.query)
            // ctx.body = utils.success('查询成功!')
            let params = {}
            if (userId) {
                params.userId = userId
            }
            if (phone) {
                params.phone = phone
            }
            if (nickname) {
                params.nickname = nickname
            }
            if (isInnerMember) {
                params.isInnerMember = isInnerMember
            }
            if (userStatus) {
                params.userStatus = userStatus
            }
            if (grade) {
                params.grade = grade
            }
            if (goal) {
                params.goal = goal
            }
            if (headUrl) {
                params.headUrl = headUrl
            }
            const res = await service.getUserList(params, page, skipIndex)
            // 返回数据
            ctx.body = utils.success('查询成功!', {
                list: res.rows,
                page: {
                    ...page,
                    total: res.count,
                }
            })
        } catch (error) {
            ctx.body = utils.fail(`查询异常：${error.stack}`)
        }
    }
    // 批量删除用户--也可变成编辑
    async deleteUser(ctx, next) {
        try {
            const { userIds } = ctx.request.body
            let updateList = []
            userIds.forEach(ele => {
                updateList.push({
                    userId: ele,
                    userStatus: 1
                })
            })
            // 更新数据，假删除
            await service.updateUserList(updateList)
            ctx.body = utils.success('禁用成功!')
        } catch (error) {
            console.log(error)
        }
    }
    // 编辑用户信息
    async edit(ctx, next) {
        try {
            let userInfo = ctx.request.body
            await service.updateUserInfo(userInfo)
            ctx.body = utils.success('编辑成功!')
        } catch (error) {
            console.log(error)
        }
    }
}

module.exports = new UserController()